package com.atguigu.gmall.item.rpc;

import com.atguigu.gmall.common.constant.RedisConst;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.feign.search.SearchFeignClient;
import com.atguigu.gmall.item.service.SkuDetailService;
import com.atguigu.gmall.item.to.SkuDetailTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author:lyd
 * @Date:2023/8/18 20:31
 * @Version:1.0
 * @Description
 **/
@RestController
@RequestMapping("/api/inner/item")
public class SkuDetailRpcController {


    @Autowired
    private SkuDetailService skuDetailService;
    @Autowired
    private SearchFeignClient searchFeignClient;
    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 根据skuId查询sku的详细信息
     * @param skuId
     * @return
     */
    @GetMapping("/detail/{skuId}")
    public Result<SkuDetailTO> getSkuDetail(@PathVariable("skuId") Long skuId) {
        SkuDetailTO detail = skuDetailService.getSkuDetail(skuId);

        // 窗口统计；
        // 1）、时间窗口： 每小时做一次商品分更新
        // 2）、计数窗口： 每统计满100个，把这个商品的最新分数更新一次。
        //查看一次商品详情，热度分就增加1.把这个热度分在存入到es里面
        //防止es的压力过大，我们采用计数窗口统计的方式来更新热度分
        // sku:hotscore:50
        Long increment = redisTemplate.opsForValue().increment(RedisConst.SKU_HOTSCORE_KEY + skuId);
        if (increment % 100 == 0) {
            searchFeignClient.incrHotScore(skuId, increment);
        }
        return Result.ok(detail);

    }
}
